package com.example.md.mddemo.controller;

import com.example.md.mddemo.exception.RestResVo;
import com.example.md.mddemo.exception.UserDisabledException;
import com.example.md.mddemo.exception.UserException;
import com.example.md.mddemo.exception.UserNotFoundException;
import org.springframework.web.bind.annotation.*;

/**
 * Copyright © 2018年 ziniuxiaozhu. All rights reserved.
 *
 * @Author 临江仙 hzqiuxm@163.com
 * 优先处理本Controller内的异常例子
 * @Date 2018/9/14 15:51
 */
@RestController
@RequestMapping("/user")
public class UserRestController {

    /**
     * 正常处理流程
     * @param id
     * @return
     */
    @PostMapping("{id}/_update")
    public RestResVo<Void> updateUser(@PathVariable Long id){
        if (id.equals(1L)){
            throw new UserNotFoundException(id);
        }
        if (id.equals(2L)){
            throw new UserDisabledException(id);
        }
        return RestResVo.success(null);
    }


    /**
     * 异常处理流程<br />
     * Controller中的ExceptionHandler只会处理本Controller抛出的异常 <br />
     * 指定处理的异常UserNotFoundException
     * 进入异常处理后，ExceptionHandler 方法的返回值会作为最终的结果返回给调用端。
     * 因此，务必保持 Controller 与 ExceptionHandler 返回一致的类型
     * @param e
     * @return
     */
    @ExceptionHandler(value = {UserNotFoundException.class})
    public RestResVo<Void> handleException(UserException e){
        return RestResVo.error(e);
    }

}
